# Copyright 2017 Google Inc.
#
# Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an &quot;AS IS&quot; BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.


# NOTE: This class is auto generated by the swagger code generator program.
# https://github.com/swagger-api/swagger-codegen.git
# Do not edit the class manually.

defmodule GoogleApi.CloudMonitoring.V2beta2.Api.MetricDescriptors do
  @moduledoc """
  API calls for all endpoints tagged `MetricDescriptors`.
  """

  alias GoogleApi.CloudMonitoring.V2beta2.Connection
  import GoogleApi.CloudMonitoring.V2beta2.RequestBuilder


  @doc """
  Create a new metric.

  ## Parameters

  - connection (GoogleApi.CloudMonitoring.V2beta2.Connection): Connection to server
  - project (String): The project id. The value can be the numeric project ID or string-based project name.
  - opts (KeywordList): [optional] Optional parameters
    - :alt (String): Data format for the response.
    - :fields (String): Selector specifying which fields to include in a partial response.
    - :key (String): API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.
    - :oauth_token (String): OAuth 2.0 token for the current user.
    - :pretty_print (Boolean): Returns response with indentations and line breaks.
    - :quota_user (String): Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.
    - :user_ip (String): IP address of the site where the request originates. Use this if you want to enforce per-user limits.
    - :body (MetricDescriptor): 

  ## Returns

  {:ok, %GoogleApi.CloudMonitoring.V2beta2.Model.MetricDescriptor{}} on success
  {:error, info} on failure
  """
  @spec cloudmonitoring_metric_descriptors_create(Tesla.Env.client, String.t, keyword()) :: {:ok, GoogleApi.CloudMonitoring.V2beta2.Model.MetricDescriptor.t} | {:error, Tesla.Env.t}
  def cloudmonitoring_metric_descriptors_create(connection, project, opts \\ []) do
    optional_params = %{
      :"alt" => :query,
      :"fields" => :query,
      :"key" => :query,
      :"oauth_token" => :query,
      :"prettyPrint" => :query,
      :"quotaUser" => :query,
      :"userIp" => :query,
      :"body" => :body
    }
    %{}
    |> method(:post)
    |> url("/#{project}/metricDescriptors")
    |> add_optional_params(optional_params, opts)
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> decode(%GoogleApi.CloudMonitoring.V2beta2.Model.MetricDescriptor{})
  end

  @doc """
  Delete an existing metric.

  ## Parameters

  - connection (GoogleApi.CloudMonitoring.V2beta2.Connection): Connection to server
  - project (String): The project ID to which the metric belongs.
  - metric (String): Name of the metric.
  - opts (KeywordList): [optional] Optional parameters
    - :alt (String): Data format for the response.
    - :fields (String): Selector specifying which fields to include in a partial response.
    - :key (String): API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.
    - :oauth_token (String): OAuth 2.0 token for the current user.
    - :pretty_print (Boolean): Returns response with indentations and line breaks.
    - :quota_user (String): Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.
    - :user_ip (String): IP address of the site where the request originates. Use this if you want to enforce per-user limits.

  ## Returns

  {:ok, %GoogleApi.CloudMonitoring.V2beta2.Model.DeleteMetricDescriptorResponse{}} on success
  {:error, info} on failure
  """
  @spec cloudmonitoring_metric_descriptors_delete(Tesla.Env.client, String.t, String.t, keyword()) :: {:ok, GoogleApi.CloudMonitoring.V2beta2.Model.DeleteMetricDescriptorResponse.t} | {:error, Tesla.Env.t}
  def cloudmonitoring_metric_descriptors_delete(connection, project, metric, opts \\ []) do
    optional_params = %{
      :"alt" => :query,
      :"fields" => :query,
      :"key" => :query,
      :"oauth_token" => :query,
      :"prettyPrint" => :query,
      :"quotaUser" => :query,
      :"userIp" => :query
    }
    %{}
    |> method(:delete)
    |> url("/#{project}/metricDescriptors/#{metric}")
    |> add_optional_params(optional_params, opts)
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> decode(%GoogleApi.CloudMonitoring.V2beta2.Model.DeleteMetricDescriptorResponse{})
  end

  @doc """
  List metric descriptors that match the query. If the query is not set, then all of the metric descriptors will be returned. Large responses will be paginated, use the nextPageToken returned in the response to request subsequent pages of results by setting the pageToken query parameter to the value of the nextPageToken.

  ## Parameters

  - connection (GoogleApi.CloudMonitoring.V2beta2.Connection): Connection to server
  - project (String): The project id. The value can be the numeric project ID or string-based project name.
  - opts (KeywordList): [optional] Optional parameters
    - :alt (String): Data format for the response.
    - :fields (String): Selector specifying which fields to include in a partial response.
    - :key (String): API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.
    - :oauth_token (String): OAuth 2.0 token for the current user.
    - :pretty_print (Boolean): Returns response with indentations and line breaks.
    - :quota_user (String): Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.
    - :user_ip (String): IP address of the site where the request originates. Use this if you want to enforce per-user limits.
    - :count (Integer): Maximum number of metric descriptors per page. Used for pagination. If not specified, count &#x3D; 100.
    - :page_token (String): The pagination token, which is used to page through large result sets. Set this value to the value of the nextPageToken to retrieve the next page of results.
    - :query (String): The query used to search against existing metrics. Separate keywords with a space; the service joins all keywords with AND, meaning that all keywords must match for a metric to be returned. If this field is omitted, all metrics are returned. If an empty string is passed with this field, no metrics are returned.
    - :body (ListMetricDescriptorsRequest): 

  ## Returns

  {:ok, %GoogleApi.CloudMonitoring.V2beta2.Model.ListMetricDescriptorsResponse{}} on success
  {:error, info} on failure
  """
  @spec cloudmonitoring_metric_descriptors_list(Tesla.Env.client, String.t, keyword()) :: {:ok, GoogleApi.CloudMonitoring.V2beta2.Model.ListMetricDescriptorsResponse.t} | {:error, Tesla.Env.t}
  def cloudmonitoring_metric_descriptors_list(connection, project, opts \\ []) do
    optional_params = %{
      :"alt" => :query,
      :"fields" => :query,
      :"key" => :query,
      :"oauth_token" => :query,
      :"prettyPrint" => :query,
      :"quotaUser" => :query,
      :"userIp" => :query,
      :"count" => :query,
      :"pageToken" => :query,
      :"query" => :query,
      :"body" => :body
    }
    %{}
    |> method(:get)
    |> url("/#{project}/metricDescriptors")
    |> add_optional_params(optional_params, opts)
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> decode(%GoogleApi.CloudMonitoring.V2beta2.Model.ListMetricDescriptorsResponse{})
  end
end
